home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Personal Computer World 2009 February
/
PCWFEB09.iso
/
Software
/
Resources
/
Chat & Communication
/
Digsby build 37
/
digsby_setup.exe
/
lib
/
simplejson
/
encoder.pyo
(
.txt
)
< prev
next >
Wrap
Python Compiled Bytecode
|
2008-10-13
|
7KB
|
308 lines
# Source Generated with Decompyle++
# File: in.pyo (Python 2.5)
import re
try:
from simplejson._speedups import encode_basestring_ascii as c_encode_basestring_ascii
except ImportError:
c_encode_basestring_ascii = None
ESCAPE = re.compile('[\\x00-\\x1f\\\\"\\b\\f\\n\\r\\t]')
ESCAPE_ASCII = re.compile('([\\\\"]|[^\\ -~])')
HAS_UTF8 = re.compile('[\\x80-\\xff]')
ESCAPE_DCT = {
'\\': '\\\\',
'"': '\\"',
'\x08': '\\b',
'\x0c': '\\f',
'\n': '\\n',
'\r': '\\r',
'\t': '\\t' }
for i in range(32):
ESCAPE_DCT.setdefault(chr(i), '\\u%04x' % (i,))
INFINITY = float('1e66666')
FLOAT_REPR = repr
def floatstr(o, allow_nan = True):
if o != o:
text = 'NaN'
elif o == INFINITY:
text = 'Infinity'
elif o == -INFINITY:
text = '-Infinity'
else:
return FLOAT_REPR(o)
if not allow_nan:
raise ValueError('Out of range float values are not JSON compliant: %r' % (o,))
return text
def encode_basestring(s):
def replace(match):
return ESCAPE_DCT[match.group(0)]
return '"' + ESCAPE.sub(replace, s) + '"'
def py_encode_basestring_ascii(s):
if isinstance(s, str) and HAS_UTF8.search(s) is not None:
s = s.decode('utf-8')
def replace(match):
s = match.group(0)
try:
return ESCAPE_DCT[s]
except KeyError:
n = ord(s)
if n < 65536:
return '\\u%04x' % (n,)
else:
n -= 65536
s1 = 55296 | n >> 10 & 1023
s2 = 56320 | n & 1023
return '\\u%04x\\u%04x' % (s1, s2)
except:
n < 65536
return '"' + str(ESCAPE_ASCII.sub(replace, s)) + '"'
if not c_encode_basestring_ascii:
pass
encode_basestring_ascii = py_encode_basestring_ascii
class JSONEncoder(object):
__all__ = [
'__init__',
'default',
'encode',
'iterencode']
item_separator = ', '
key_separator = ': '
def __init__(self, skipkeys = False, ensure_ascii = True, check_circular = True, allow_nan = True, sort_keys = False, indent = None, separators = None, encoding = 'utf-8', default = None):
self.skipkeys = skipkeys
self.ensure_ascii = ensure_ascii
self.check_circular = check_circular
self.allow_nan = allow_nan
self.sort_keys = sort_keys
self.indent = indent
self.current_indent_level = 0
if separators is not None:
(self.item_separator, self.key_separator) = separators
if default is not None:
self.default = default
self.encoding = encoding
def _newline_indent(self):
return '\n' + ' ' * self.indent * self.current_indent_level
def _iterencode_list(self, lst, markers = None):
if not lst:
yield '[]'
return None
if markers is not None:
markerid = id(lst)
if markerid in markers:
raise ValueError('Circular reference detected')
markers[markerid] = lst
yield '['
if self.indent is not None:
self.current_indent_level += 1
newline_indent = self._newline_indent()
separator = self.item_separator + newline_indent
yield newline_indent
self
else:
newline_indent = None
separator = self.item_separator
first = True
for value in lst:
if first:
first = False
else:
yield separator
for chunk in self._iterencode(value, markers):
yield chunk
if newline_indent is not None:
self.current_indent_level -= 1
yield self._newline_indent()
self
yield ']'
if markers is not None:
del markers[markerid]
def _iterencode_dict(self, dct, markers = None):
if not dct:
yield '{}'
return None
if markers is not None:
markerid = id(dct)
if markerid in markers:
raise ValueError('Circular reference detected')
markers[markerid] = dct
yield '{'
key_separator = self.key_separator
if self.indent is not None:
self.current_indent_level += 1
newline_indent = self._newline_indent()
item_separator = self.item_separator + newline_indent
yield newline_indent
self
else:
newline_indent = None
item_separator = self.item_separator
first = True
if self.ensure_ascii:
encoder = encode_basestring_ascii
else:
encoder = encode_basestring
allow_nan = self.allow_nan
_encoding = self.encoding
if _encoding is not None:
pass
_do_decode = not (_encoding == 'utf-8')
for key, value in items:
if isinstance(key, str):
if _do_decode:
key = key.decode(_encoding)
elif isinstance(key, basestring):
pass
elif isinstance(key, float):
key = floatstr(key, allow_nan)
elif isinstance(key, (int, long)):
key = str(key)
elif key is True:
key = 'true'
elif key is False:
key = 'false'
elif key is None:
key = 'null'
elif self.skipkeys:
continue
else:
raise TypeError('key %r is not a string' % (key,))
if first:
first = False
else:
yield item_separator
yield encoder(key)
yield key_separator
for chunk in self._iterencode(value, markers):
yield chunk
if newline_indent is not None:
self.current_indent_level -= 1
yield self._newline_indent()
self
yield '}'
if markers is not None:
del markers[markerid]
def _iterencode(self, o, markers = None):
if isinstance(o, basestring):
if self.ensure_ascii:
encoder = encode_basestring_ascii
else:
encoder = encode_basestring
_encoding = self.encoding
if _encoding is not None and isinstance(o, str) and not (_encoding == 'utf-8'):
o = o.decode(_encoding)
yield encoder(o)
elif o is None:
yield 'null'
elif o is True:
yield 'true'
elif o is False:
yield 'false'
elif isinstance(o, (int, long)):
yield str(o)
elif isinstance(o, float):
yield floatstr(o, self.allow_nan)
elif isinstance(o, (list, tuple)):
for chunk in self._iterencode_list(o, markers):
yield chunk
elif isinstance(o, dict):
for chunk in self._iterencode_dict(o, markers):
yield chunk
elif markers is not None:
markerid = id(o)
if markerid in markers:
raise ValueError('Circular reference detected')
markers[markerid] = o
for chunk in self._iterencode_default(o, markers):
yield chunk
if markers is not None:
del markers[markerid]
def _iterencode_default(self, o, markers = None):
newobj = self.default(o)
return self._iterencode(newobj, markers)
def default(self, o):
raise TypeError('%r is not JSON serializable' % (o,))
def encode(self, o):
if isinstance(o, basestring):
if isinstance(o, str):
_encoding = self.encoding
if _encoding is not None and not (_encoding == 'utf-8'):
o = o.decode(_encoding)
if self.ensure_ascii:
return encode_basestring_ascii(o)
else:
return encode_basestring(o)
chunks = list(self.iterencode(o))
return ''.join(chunks)
def iterencode(self, o):
if self.check_circular:
markers = { }
else:
markers = None
return self._iterencode(o, markers)
__all__ = [
'JSONEncoder']